Include.so Biblioteka w apk w Android studio [duplikat]
To pytanie ma już odpowiedź tutaj:
- Android studio, gradle i NDK 23 odpowiedzi
Próbuję stworzyć prostą aplikację na Androida, w której próbuję używać sqlcipher , która wewnętrznie używa bibliotek. so. Zapoznałem się z dokumentacją Jak używać sqlcipher z aplikacją android . I have followed kroki i kompiluje się bez żadnego błędu. Ale w czasie wykonywania rzuca UnsatisfiedLinkError
.
Szukając go w Googlach, odkryłem, że gradle nie obsługuje. więc biblioteki jeszcze , ale znalazłem hack tutaj, którego próbuję użyć. Ale wyrzuca błąd czasu kompilacji w linii # 40 na gist, który jest,
tasks.withType(com.android.build.gradle.PackageApplicationTask) { pkgTask ->
pkgTask.jniDir new File(buildDir, 'native-libs')
}
Mówiąc
Nie można znaleźć właściwości 'com' w projekcie 'MyProject'
Tutaj zamieszczam kod z mojej kompilacji.plik gradle.
buildscript {
repositories {
maven { url 'http://repo1.maven.org/maven2' }
}
dependencies {
classpath 'com.android.tools.build:gradle:0.4'
}
}
apply plugin: 'android'
dependencies {
compile files('libs/android-support-v4.jar')
compile files('libs/commons-codec.jar')
compile files('libs/guava-r09.jar')
compile files('libs/sqlcipher.jar')
}
targetCompatibility = 1.6
sourceCompatibility = 1.6
android {
target = 'android-14'
compileSdkVersion 17
buildToolsVersion "17.0.0"
defaultConfig {
minSdkVersion 9
targetSdkVersion 16
}
}
task copyNativeLibs(type: Copy) {
from(new File(project(':MyProject').buildDir, 'native-libs')) { include '**/*.so' }
into new File(buildDir, 'native-libs')
}
tasks.withType(Compile) { compileTask -> compileTask.dependsOn copyNativeLibs }
clean.dependsOn 'cleanCopyNativeLibs'
tasks.withType(com.android.build.gradle.PackageApplicationTask) { pkgTask ->
pkgTask.jniDir new File(buildDir, 'native-libs')
}
Can, ktoś proszę mi pomóc w tym, co zrobiłem źle lub co powinienem zrobić, aby to uwzględnić. więc biblioteki w moim apk?
Ponieważ jestem nowy w rozwoju Androida i gradle, proszę przeprosić mnie, jeśli coś źle zrozumiałem.
3 answers
Miałem ten sam problem. Sprawdź komentarz w https://gist.github.com/khernyo/4226923#comment-812526
Pisze:
Dla gradle android plugin v0. 3 Użyj " com.android.buduj.gradle.zadania.PackageApplication "
To powinno rozwiązać twój problem.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-22 17:14:45
Wypróbowałem rozwiązanie przedstawione w zaakceptowanej odpowiedzi i nie zadziałało dla mnie. Chciałem podzielić się tym, co dla mnie działa, ponieważ może to pomóc komuś innemu. Znalazłem to rozwiązanie tutaj .
Zasadniczo to, co musisz zrobić, to umieścić swoje pliki .so
w folderze o nazwie lib
(Uwaga: to nie jest libs
i nie jest to błąd). Powinien mieć taką samą strukturę jak w pliku APK
.
W moim przypadku to było:
Projekt:
| -- lib:
/ -- / -- armeabi:
/ -- / -- / -- . so files.
Więc zrobiłem folder lib, a wewnątrz niego folder armeabi, w którym wstawiłem wszystkie potrzebne pliki. so. Następnie spakowałem folder do .zip
(struktura wewnątrz pliku zip jest teraz lib/armeabi/*.więc) zmieniłem nazwę pliku .zip
na armeabi.jar
i dodałem linię compile fileTree(dir: 'libs', include: '*.jar')
do dependencies {}
w pliku kompilacji gradle.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-16 08:20:55
Aby dołączyć natywne biblioteki potrzebujesz:
- Utwórz plik "jar" ze specjalną strukturą zawierającą pliki ".so";
- dołącz ten plik do listy zależności.
Aby utworzyć plik jar, użyj następującego fragmentu:
task nativeLibsToJar(type: Zip, description: 'create a jar archive of the native libs') {
destinationDir file("$buildDir/native-libs")
baseName 'native-libs'
extension 'jar'
from fileTree(dir: 'libs', include: '**/*.so')
into 'lib/'
}
tasks.withType(Compile) {
compileTask -> compileTask.dependsOn(nativeLibsToJar)
}
Aby dołączyć plik wynikowy, wklej następujący wiersz do sekcji "zależności" W " build.gradle " plik:
compile fileTree(dir: "$buildDir/native-libs", include: 'native-libs.jar')
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-05 06:00:25